package com.woniuxy.mq;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * @Author author
 * @Create 2024-02-29 15:40
 */
public class Producer {

    public static void main(String[] args) throws IOException, TimeoutException {
        //生产者发送消息
        //创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //设置连接参数
        factory.setHost("192.168.80.84");
        factory.setPort(5672);
        factory.setUsername("guest");
        factory.setPassword("guest");
        //设置虚拟主机：就是MySQL的db1,db2
        factory.setVirtualHost("/");
        //创建连接对象
        Connection connection = factory.newConnection();
        //创建通信管道对象
        Channel channel = connection.createChannel();
        //队列声明：创建并连接到指定的队列
        //String queue, 队列名称
        // boolean durable,是否持久化，一般使用true:重启mq服务，不会删除队列
        // boolean exclusive,是否独占，一般使用false，如果是独占队列，只有当前连接才能访问队列
        // boolean autoDelete,是否自动删除，一般使用false，如果自动删除，队列中的消息处理完，队列也删除
        // Map<String, Object> arguments，队列其他属性
        channel.queueDeclare("queuehelloword", true, false, false, null);
        //要发送的消息
        String message = "Hello World!";
        //向消息队列发送消息
        //String exchange, 指定消息发送到哪个交换机，使用helloword工作模式,写“”，使用的系统的默认交换机AMQP default
        //The default exchange is implicitly bound to every queue, with a routing key equal to the queue name.
        // String routingKey,指定路由key,就是地址，交换机就是根据路由key将消息投递到指定的队列，helloword工作模式，路由key就是队列名
        // BasicProperties props,消息基本属性(消息头)
        // byte[] body，消息体，消息正文内容
        for (int i=1;i<=10;i++) {
            channel.basicPublish("", "queuehelloword", null, (message+"---"+i).getBytes());
        }
        channel.close();
        connection.close();
    }
}
